/**
 * 
 */
package com.oren.json;

import java.util.List;

/**
 * @author orennamu
 *
 */
public class JSON{
	public static final int TYPE_STR = 0;
	public static final int TYPE_ARR = 1;
	public static final int TYPE_JSON = 2;
	
	private boolean bRoot = false;
	private int type = TYPE_STR;
	private String key = null;
	private Object value = null;
	
	public JSON() {
		this(null);
	}
	public JSON(String key) {
		if(key == null)
			bRoot = true;
		else bRoot = false;
		this.key = key;
//		hmValues = new ArrayList<HashMap<String, JSON>>();
	}
	public String gKey() {
		return key;
	}
	public boolean isRoot() {
		return bRoot;
	}
	public Object gObj() {
		return value;
	}
	public int gType() {
		return type;
	}
	public void put(Object js) {
		if(js instanceof String) {
			type = TYPE_STR;
		} else if(js instanceof List) {
			type = TYPE_ARR;
		} else if(js instanceof JSON) {
			type = TYPE_JSON;
		} else {
			
		}
		value = js;
	}
	@SuppressWarnings("unchecked")
	public List<JSON> gList() {
		return (List<JSON>)value;
	}
	public JSON gJSON() {
		return (JSON)value;
	}
	public String gStr() {
		return (String)value;
	}
//	public String JSONtoString() {
//		StringBuffer xmlStr = new StringBuffer(512);
//		xmlStr.append(this.header);
//		xmlStr.append(convertXmlString(root, 0));
//		return xmlStr.toString();
//	}
//	protected StringBuffer convertXmlString(Element ele, int level) {
//		StringBuffer chum = new StringBuffer();
//		chum.append("\n");
//		
//		for(int i = 0; i <level;i++) chum.append("\t");
//		StringBuffer xmlStr = new StringBuffer(64);
//		xmlStr.append(chum.toString()+"<" + ele.gName());
//		StringBuffer strAttr = new StringBuffer();
//		for(int i = 0; i<ele.gAttrs().size();i++) {
//			Attribute attr = ele.gAttrs().get(i);
//			if(attr.gNS() != null) {
//				strAttr.append(" " + attr.gNS().gNS()+":"+attr.gName()+"=\""+attr.gValue()+"\"");
//			} else 
//				strAttr.append(" " + attr.gName()+"=\""+attr.gValue()+"\"");
//		}
//		strAttr.append(">");
//		xmlStr.append(strAttr);
//		if(ele.gText() != null && !ele.gText().trim().equals("")) {
//			xmlStr.append(ele.gText());
//			xmlStr.append("</" + ele.gName()+">");
//		} else {
//			int cnt = ele.gChildren().size();
//			for(int i = 0; i < cnt; i++) {
//				xmlStr.append(this.convertXmlString(ele.gChildren().get(i), level+1));
//			}
//			if(cnt == 0) xmlStr.append("</" + ele.gName()+">");
//			else xmlStr.append(chum.toString() + "</" + ele.gName()+">");
//		}
//		return xmlStr;
//	}
//	public InputStream xmlToInputStream() {
//		ByteArrayInputStream stream = new ByteArrayInputStream(xmlToBytes());
//		return stream;
//	}
//	protected void XmlToOutputStream(Element ele, int level, OutputStream out) throws IOException {
//		StringBuffer chum = new StringBuffer();
//		chum.append("\n");
//		for(int i = 0; i <level;i++) chum.append("\t");
//		out.write((chum.toString()+"<" + ele.gName()).getBytes());
//		StringBuffer strAttr = new StringBuffer(32);
//		for(int i = 0; i<ele.gAttrs().size();i++) {
//			Attribute attr = ele.gAttrs().get(i);
//			strAttr.append(" " + attr.gName()+"=\""+attr.gValue()+"\"");
//		}
//		out.write((strAttr.toString() + ">").getBytes());
//		
//		if(ele.gText() != null && !ele.gText().trim().equals("")) {
//			String xmlStr = ele.gText()+"</" + ele.gName()+">";
//			out.write(xmlStr.getBytes());
//		} else {
//			int cnt = ele.gChildren().size();
//			for(int i = 0; i < cnt; i++) {
//				this.XmlToOutputStream(ele.gChildren().get(i), level+1, out);
////				out.write(xmlStr.getBytes());
//			}
//			StringBuffer xmlStr = new StringBuffer();
//			if(cnt == 0) xmlStr.append("</" + ele.gName()+">");
//			else xmlStr.append(chum.toString() + "</" + ele.gName()+">");
//			out.write(xmlStr.toString().getBytes());
//		}
//		out.flush();
//	}
//	public void xmlToOutputStream(OutputStream out) {
//		try {
//			out.write(this.header.getBytes());
//			XmlToOutputStream(root, 0, out);
//		} catch (IOException e) {
//			System.out.println("orenXml : Document : Error -> " + e.getMessage());
//		}
//	}
}
